// Set 在红黑树中体现为 key = value
// 不允许通过set迭代器改变set元素值
#include <functional>
#include "../allocator/alloc.h"

template <typename Key,
          typename Compare = std::less<Key>,
          typename Alloc = alloc>
class set
{
    using key_type = Key;
    using value_type = Key;
    using key_compare = Compare;
    using value_compare = Compare;

private:
    template <typename T>
    struct identity
    {
        const T &operator()(const T &x) const noexcept
        {
            return x;
        }

        constexpr T &&operator()(T &&t) const noexcept
        {
            return std::forward<T>(t);
        }
    };
    
}